﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	НастроитьОтображениеСпискаРолей();
	
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
		МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер");
		МодульМультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "ИспользоватьВнешнихПользователей" Тогда
		НастроитьОтображениеСпискаРолей();
	КонецЕсли;
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура НастроитьОтображениеСпискаРолей()
	
	ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ИсполнителиЗадач.РольИсполнителя КАК РольИсполнителя
	|ПОМЕСТИТЬ Исполнители
	|ИЗ
	|	РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей
	|		ПО ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителей.Ссылка
	|;";
		
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда
		
		ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
		|	СправочникРолиИсполнителей.Ссылка,
		|	СправочникРолиИсполнителей.ПометкаУдаления,
		|	СправочникРолиИсполнителей.Предопределенный,
		|	СправочникРолиИсполнителей.Код,
		|	СправочникРолиИсполнителей.Наименование,
		|	СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации,
		|	СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации,
		|	СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации,
		|	СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации,
		|	СправочникРолиИсполнителей.Комментарий,
		|	ВЫБОР
		|		КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации
		|			ТОГДА ИСТИНА
		|		КОГДА СправочникРолиИсполнителей.Ссылка В
		|				(ВЫБРАТЬ
		|					Исполнители.РольИсполнителя
		|				ИЗ
		|					Исполнители КАК Исполнители
		|				ГДЕ
		|					Исполнители.РольИсполнителя = СправочникРолиИсполнителей.Ссылка)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЕстьИсполнители,
		|	СправочникРолиИсполнителей.ВнешняяРоль,
		|	СправочникРолиИсполнителей.КраткоеПредставление
		|ИЗ
		|	Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей";
		
	Иначе
		
		ТекстЗапроса = ТекстЗапроса + "
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	РолиИсполнителейНазначение.Ссылка КАК Ссылка,
		|	РолиИсполнителейНазначение.ТипПользователей КАК ТипПользователей
		|ПОМЕСТИТЬ РолиИсполнителейНазначение
		|ИЗ
		|	Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение
		|;
		|ВЫБРАТЬ
		|	СправочникРолиИсполнителей.Ссылка,
		|	СправочникРолиИсполнителей.ПометкаУдаления,
		|	СправочникРолиИсполнителей.Предопределенный,
		|	СправочникРолиИсполнителей.Код,
		|	СправочникРолиИсполнителей.Наименование,
		|	СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации,
		|	СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации,
		|	СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации,
		|	СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации,
		|	СправочникРолиИсполнителей.Комментарий,
		|	ВЫБОР
		|		КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации
		|			ТОГДА ИСТИНА
		|		КОГДА СправочникРолиИсполнителей.Ссылка В
		|				(ВЫБРАТЬ
		|					Исполнители.РольИсполнителя
		|				ИЗ
		|					Исполнители КАК Исполнители
		|				ГДЕ
		|					Исполнители.РольИсполнителя = СправочникРолиИсполнителей.Ссылка)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЕстьИсполнители,
		|	СправочникРолиИсполнителей.ВнешняяРоль,
		|	СправочникРолиИсполнителей.КраткоеПредставление
		|ИЗ
		|	РолиИсполнителейНазначение КАК РолиИсполнителейНазначение
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей
		|		ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка
		|ГДЕ
		|	РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)";
	КонецЕсли;
	
	СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
	СвойстваСписка.ОсновнаяТаблица              = "Справочник.РолиИсполнителей";
	СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
	СвойстваСписка.ТекстЗапроса                 = ТекстЗапроса;
	ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	Список.УсловноеОформление.Элементы.Очистить();
	Элемент = Список.УсловноеОформление.Элементы.Добавить();
	
	ГруппаЭлементовОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаЭлементовОтбора .ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	
	ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЕстьИсполнители");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнешняяРоль");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РольБезИсполнителей);
	
КонецПроцедуры

#КонецОбласти
